package leetcode_21_40;

import utils.ListNode;

public class swapPairs_24 {
    /**
     * 目前思路，三个一组按顺序操作
     * @param head
     * @return
     */
    public static ListNode swapPairs(ListNode head) {
        ListNode dummy = new ListNode(0, head); // 用哨兵节点简化代码逻辑
        ListNode node0 = dummy;
        ListNode node1 = head;
        while (node1 != null && node1.next != null) { // 至少有两个节点
            ListNode node2 = node1.next;
            ListNode node3 = node2.next;

            node0.next = node2; // 0 -> 2
            node2.next = node1; // 2 -> 1
            node1.next = node3; // 1 -> 3

            node0 = node1; // 0节点提前放到变化的头节点前
            node1 = node3; // 头节点先后移动两位
        }
        return dummy.next; // 返回新链表的头节点
    }
}
